﻿#define _CRT_SECURE_NO_WARNINGS 1

//#include <stdio.h>
//int main()
//{
//	//= ==
//	//当一个变量和一个常量比较相等的时候，应该怎么写呢？
//	//建议将常量放在==的左边
//	int a = 5;
//	if (5 == a)
//	{
//		printf("hehe\n");
//	}
//
//	return 0;
//}

//关系操作符
//  > ⼤于运算符
 /*   • < ⼩于运算符
	• >= ⼤于等于运算符
	• <= ⼩于等于运算符
	• == 相等运算符
	• != 不相等运算符*/
//&& - 并且 的意思 逻辑操作符
//int main()
//{
//	int age = 0;
//	scanf("%d", &age);
//	if(age >= 18 && age <= 36)
//			printf("青年\n");
//	return 0;
//}

//条件操作符也叫三目操作符
//exp1 ? exp2 : exp  条件操作符的计算逻辑是：如果 exp1 为真， exp2 计算，计算的结果是整个表达式的结果；如果
//exp1 为假， exp3 计算，计算的结果是整个表达式的结果。
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a,&b);
//	int c = (a > b ? a : b);//如果 a大于b，表达式为真 将a值赋予c 如果不大于，为假，b值赋予c
//	printf("%d\n", c);
//	return 0;
//}

//逻辑操作符 && , ||, ！
//逻辑取反运算符 ！
//• !：逻辑取反运算符（改变单个表达式的真假）。
//• && ：逻辑与运算符，就是并且的意思（两侧的表达式都为真，则为真，否则为假）。
//• || ：逻辑或运算符，就是或者的意思（两侧⾄少有⼀个表达式为真，则为真，否则为假）。
//int main()
//{
//	int flag = 1;
//	scanf("%d", &flag);
//	if (!flag)//flag为假!0才会执行语句  flag 为假要做什么
//		printf("hehe");
//	return 0;
//}

//逻辑与运算符  && 并且
//•&& ：逻辑与运算符，就是并且的意思（两侧的表达式都为真，则为真，否则为假）。
//int main()
//{
//	int month = 0;
//	scanf("%d", &month);
//	if (month >= 3 && month <= 5)
//		printf("春季\n");
//	return 0;
//}

// 逻辑或运算符 || 或者
//• || ：逻辑或运算符，就是或者的意思（两侧⾄少有⼀个表达式为真，则为真，否则为假）。
//int main()
//{
//	int month = 0;
//	scanf("%d", &month);
//	if (month == 12 || month == 1 || month == 2)
//		printf("冬季\n");
//	return 0;
//}
//int main()
//{
//	int year = 0;
//	scanf("%d", &year);
//	if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
//		printf("%d 是闰年\n", year);
//	return 0;
//}
//短路
//C语⾔逻辑运算符还有⼀个特点，它总是先对左侧的表达式求值，再对右边的表达式求值，这个顺序是保证的。
//如果左边的表达式满⾜逻辑运算符的条件，就不再对右边的表达式求值。这种情况称为“短路”。
//if(month >= 3 && month <= 5)
// 表达式中&& 的左操作数是 month >= 3 ，右操作数是 month <= 5 ,当左操作数 month >= 3 的
//结果是0的时候，即使不判断 month <= 5 ，整个表达式的结果也是0（不是春季）。
//对于&&操作符来说，左边操作数的结果是0的时候，右边操作数就不再执⾏。

// if(month == 12 || month==1 || month == 2)
// 如果month == 12，则不⽤再判断month是否等于1或者2，整个表达式的结果也是1（是冬季）。
// || 操作符的左操作数的结果不为0时，就⽆需执⾏右操作数。
//像这种仅仅根据左操作数的结果就能知道整个表达式的结果，不再对右操作数进⾏计算的运算称为短路求值。

//分支语句 switch
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	switch (n % 3)//括号中表达式 switch 后的 expression 必须是整型表达式	
//	{
//	case 0:// case 后的值，必须是整形常量表达式 也可使用char字符型
//		printf("余数是0\n");
//		break;//打断的意思 跳出
//	case 1:
//		printf("余数是1\n");
//		break;
//	case 2:
//		printf("余数是2\n");
//		break;
//	}
//	return 0;
//}

//int main()
//{
//	int day = 0;
//	scanf("%d", &day);
//	switch (day)
//	{
//	case 1:
//	case 2:
//	case 3:
//	case 4:
//	case 5:
//		printf("工作日\n");
//		break;// break 也不是每个 case 语句都得有，这就得根据实际情况来看了。没有break就会一直往下执行
//	case 6:
//	case 7:
//		printf("休息日\n");
//		break;
//	default://当值不是case当中的任何一个时 就会执行default语句
//		printf("输入错误，输入的值应该在1~7的范围\n");
//		break;
//	}
//	return 0;
//}

//循环语句 while
//int main()
//{
//	int n = 10;
//	while (n > 0)//括号中的表达式只要一直为真 就会一直打印 执行
//		printf("hehe\n");
//	return 0;
//}

//int main()
//{
//	int i = 1;
//	while (i <= 10)
//	{
//		printf("%d", i);
//			i++;
//	}
//	return 0;
//}


//1. 要想得到n的最低位，可以使⽤n % 10的运算，得到的余数就是最低位，如：1234 % 10得到4
//2. 要想去掉n的最低位，找出倒数第⼆位，则使⽤ n = n / 10 操作就可以去掉最低位的，如：
//   n = 1234 / 10得到123，123相较于1234就去掉了最低位，123 % 10就得到倒数第⼆位3。
//3. 循环1和2两个步骤，在n变成0之前，就能到所有的位
#include <stdio.h>
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	while (n)
//	{
//		printf("%d ", n % 10);//取摸 得最后一位 1234 % 得到 4 此时打印输出 得 4
//		n /= 10;//复合函数 等效于 n = n / 10; 将1234 除 10 得到123 将4去掉 将123赋值于n  n就是123 重新循环运算 打印得到3 来回循环 得到 4 3 2 1
//	}
//	return 0;
//}

//for 循环语句
//for (表达式1; 表达式2; 表达式3) 
//表达式1 ⽤于循环变量的初始化
//表达式2 ⽤于循环结束条件的判断
//表达式3 ⽤于循环变量的调整
//int main()//输出1 -10的数
//{
//	int i = 0;
//	for (i=1; i<=10; i++)
//	{
//		printf("%d ", i);
//	}
//	return 0;
//}

//计算1~100之间3的倍数的数字之和
//int main()
//{
//	int i = 0;
//	int sum = 0;
//	for (i = 1; i <= 100; i++)
//	{
//		if (i % 3 == 0)//对3取模就是3的倍数
//			sum += i;
//	}
//	printf("%d\n", sum);
//	return 0;
//}
//优化
//int main()
//{
//	int i = 0;
//	int sum = 0;
//	for (i = 3; i <= 10; i += 3)
//	{
//		sum += i;
//	}
//	printf("%d\n", sum);
//	return 0;
//}

//do-while 循环
//先执行 再判断循环条件
//int main()//输出1 -10的数
//{
//	int i = 1;
//	do
//	{
//		printf("%d ", i);
//		i = i++;
//	} while (i <= 10);
//
//	return 0;
//}

//输入一个正整数，计算这个整数是几位数
//int main()//123
//{
//	int n = 0;
//	int count = 0;
//	scanf("%d", &n);//123
//	do
//	{
//		count++;//执行一次 count加一 
//		n = n / 10;//123 除10 去掉最后一位3 得 12 循环3次 conut+三次 就计算得出三位 
//	} while (n);
//	printf("%d\n", count);
//	return 0;
//}


//终止语句  break 和 continue 
//int main()
//{
//	int i = 1;
//	while (i<=10)
//	{
//		if (i == 5)
//			break;//break 的作⽤是⽤于永久的终⽌循环，只要 break 被执⾏，直接就会跳出循环，继续往后执⾏。
//		printf("%d ", i);
//		i++;
//	}
//
//	return 0;
//}

//continue 的作⽤是跳过本次循环中 continue 后边的代码，在 for 循环和 while 循环中有所差异的。
//int main()
//{
//	int i = 1;
//	while (i <= 10)
//	{
//		if (i == 5)
//			continue;
//		//当i等于5后，就执⾏continue，直接跳过continue的代码，去循环的判断的地⽅
//		//因为这⾥跳过了i = i+1，所以i⼀直为5，程序陷⼊和死循环
//		printf("%d ", i);
//		i = i + 1;
//	}
//	return 0;
//}
//int main()
//{
//	int i = 1;
//	for (i = 1; i <= 10; i++)
//	{
//		if (i == 5)
//			continue;//这⾥continue跳过了后边的打印，来到了i++的调整部分
//		printf("%d ", i);//此时就会输出1234678910 跳过5
//	}
//	return 0;
//}
int main()
{
	int year = 1000;
	int count = 0;
	for (year = 1000; year<=1000;((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
	{
		count++;
	}
		printf("%d 个闰年\n", count);
	return 0;
}